import os
from dotenv import load_dotenv

# 加载环境变量
load_dotenv()

class JavaBugDetectorConfig:
    # AI模型配置
    AI_PROVIDER = os.getenv('AI_PROVIDER', 'kimi')  # openai 或 kimi
    
    # OpenAI配置
    OPENAI_API_KEY = os.getenv('OPENAI_API_KEY')
    OPENAI_MODEL = os.getenv('OPENAI_MODEL', 'gpt-3.5-turbo')
    OPENAI_BASE_URL = os.getenv('OPENAI_BASE_URL', 'https://api.openai.com/v1')
    
    # Kimi配置
    KIMI_API_KEY = os.getenv('KIMI_API_KEY','sk-FfHaig7Mjk1hMSF6vX0WUWNFYY6hYOnizP7y2WGGLNFkbcun')
    KIMI_MODEL = os.getenv('KIMI_MODEL', 'moonshot-v1-8k')  # moonshot-v1-8k, moonshot-v1-32k, moonshot-v1-128k
    KIMI_BASE_URL = os.getenv('KIMI_BASE_URL', 'https://api.moonshot.cn/v1')
    
    # 通用配置
    MAX_TOKENS = int(os.getenv('MAX_TOKENS', '3000'))
    TEMPERATURE = float(os.getenv('TEMPERATURE', '0.1'))
    REQUEST_TIMEOUT = int(os.getenv('REQUEST_TIMEOUT', '60'))
    
    # Java文件扩展名
    JAVA_EXTENSIONS = {'.java'}
    
    # 忽略的目录
    IGNORE_DIRS = {
        'target', 'build', '.git', '.idea', '.vscode',
        'node_modules', '.gradle', 'out', 'bin'
    }
    
    # 忽略的文件
    IGNORE_FILES = {
        '.gitignore', '.env', 'pom.xml', 'build.gradle',
        'gradle.properties', 'settings.gradle'
    }
    
    # 最大文件大小 (字节) - Java文件通常较大
    MAX_FILE_SIZE = 100000  # 100KB
    
    # Java BUG检测提示模板
    BUG_DETECTION_PROMPT = """
你是一个专业的Java代码BUG检测专家。请仔细分析以下Java代码，重点关注BUG检测和修复建议。

文件路径: {file_path}

Java代码:
```java
{code_content}
```

请按照以下格式进行详细的BUG分析：

## 🐛 BUG检测结果

### 严重BUG (Critical) 🔴
- 列出可能导致程序崩溃、数据丢失或安全漏洞的严重问题
- 每个BUG包含：问题描述、位置、影响、修复建议

### 重要BUG (Major) 🟡  
- 列出可能导致功能异常或性能问题的重要问题
- 每个BUG包含：问题描述、位置、影响、修复建议

### 一般BUG (Minor) 🟢
- 列出代码质量问题、潜在风险或改进建议
- 每个BUG包含：问题描述、位置、修复建议

## 🔧 具体修复建议

对于每个发现的BUG，提供：
1. **问题根因分析**
2. **修复代码示例** (如果适用)
3. **预防措施**
4. **相关最佳实践**

## 📊 代码质量评分
- **BUG风险等级**: 高/中/低
- **代码质量评分**: X/10分
- **主要改进方向**: 列出2-3个最重要的改进建议

## 🎯 重点关注的BUG类型
请特别注意以下常见Java BUG：
- 空指针异常 (NullPointerException)
- 数组越界 (ArrayIndexOutOfBoundsException)  
- 资源泄漏 (未关闭的流、连接等)
- 并发问题 (线程安全、死锁等)
- 内存泄漏
- SQL注入和其他安全漏洞
- 异常处理不当
- 逻辑错误
- 性能问题

请用中文回复，并确保每个BUG都有具体的修复建议。
"""

    # 常见Java BUG模式 - 用于预筛选
    COMMON_BUG_PATTERNS = [
        # 空指针相关
        r'\.(?:get|set|toString|equals)\s*\(',
        r'String\s+\w+\s*=\s*null',
        # 资源泄漏
        r'new\s+(?:FileInputStream|FileOutputStream|BufferedReader|Connection)',
        r'(?:Statement|PreparedStatement|ResultSet)\s+\w+\s*=',
        # 异常处理
        r'catch\s*\(\s*Exception\s+\w+\s*\)\s*\{\s*\}',
        r'printStackTrace\s*\(\s*\)',
        # 并发问题
        r'static\s+(?!final).*=',
        r'synchronized\s*\(',
        # SQL相关
        r'(?:SELECT|INSERT|UPDATE|DELETE).*\+',
        # 数组操作
        r'\[\s*\w+\s*\]',
    ]
    
    @classmethod
    def get_current_provider(cls):
        """获取当前配置的AI提供商"""
        return cls.AI_PROVIDER.lower()
    
    @classmethod
    def validate_config(cls):
        """验证配置是否有效"""
        provider = cls.get_current_provider()
        
        if provider == 'openai':
            if not cls.OPENAI_API_KEY:
                raise ValueError("使用OpenAI时必须设置OPENAI_API_KEY")
            return True
        elif provider == 'kimi':
            if not cls.KIMI_API_KEY:
                raise ValueError("使用Kimi时必须设置KIMI_API_KEY")
            return True
        else:
            raise ValueError(f"不支持的AI提供商: {provider}。支持的提供商: openai, kimi")
